#ifndef MESH
#define MESH
// 这里是面对的世界。
// 直角坐标系为
/*                       z     y
                         A   7 
                         |  /
                         | /
                         |/
                         *-----------> x 
                        
*/
// 功能1，展示一个正方体的点的位置。

#include<windows.h>
#include<DirectXMath.h>
#include<string>
#include<vector>
using namespace std;
using namespace DirectX;

namespace SoftEngine{
    // 这是一个三角形，由三个顶点的编号组成
    class Mesh{
        public:

        int index1;
        int index2;
        int index3;
        
        Mesh(int index1,int index2,int index3):index1(index1),index2(index2),index3(index3){};
    };
    class MeshColorful:public Mesh{
        public :

        COLORREF color;
        
        MeshColorful(int index1,int index2,int index3,COLORREF color):Mesh(index1,index2,index3),color(color){};
    };
    // 这是模型的坐标等信息，名字没起好，积重难返，不管了，就这样了。
    class DotMatrix{
        public:
            string name;
            //顶点
            vector<XMFLOAT3> vertex;
            //三角形
            vector<Mesh> mesh;
            // 中心点，围绕中心点进行旋转和移动
            XMFLOAT3 position;
            XMFLOAT3 rotation;
            DotMatrix();
            DotMatrix(string dotMatrixName,int count,XMFLOAT3 position);
            DotMatrix(string dotMatrixName,int count,XMFLOAT3 position,XMFLOAT3 rotation);
            // 按照index插入到vertex顶点表中。插入的点的坐标是以原点为参考的，实际保存的点是以中心点为参考的
            void InsertVertex(int index,XMFLOAT3 newVertex);
            // 新增一个面
            void InsertMesh(int index1,int index2,int index3);
            // 对这个点阵进行旋转矩阵变换
            void handleDotMatrix1(XMFLOAT3 Rotation);
    };
    // 生成一个正方体
    DotMatrix GenerateNewMesh1();
    DotMatrix AnalysisModel();

    class Model:public DotMatrix{
        public:
        vector<MeshColorful> mesh;

        Model():DotMatrix(){};
        Model(string dotMatrixName,int count,XMFLOAT3 position):DotMatrix(dotMatrixName,count,position){};
        Model(string dotMatrixName,int count,XMFLOAT3 position,XMFLOAT3 rotation):DotMatrix(dotMatrixName,count,position,rotation){};
        // 新增一个面
        void InsertMesh(int index1,int index2,int index3,COLORREF color);
        
    };
    Model GenerateNewMesh2();
}
#endif